home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 8
/
FM Towns Free Software Collection 8.iso
/
t_os
/
artemis
/
artsrc2
/
usrfnc.c
< prev
next >
Wrap
Text File
|
1994-06-01
|
6KB
|
289 lines
typedef unsigned int uint;
char EGB_work[1536];
/*
void ginit()
{
KYB_init();
EGB_init(EGB_work, 1536);
}
*/
/*===============================================
キーボード関係
===============================================*/
char key_get()
{
uint code, encode;
for (;;) {
code = KYB_read( 0, &encode );
if ( (code & 0xffff) == 0xffff && (encode & 0xff00) == 0xff00 )
continue;
break;
}
return (char) code;
}
int key_chk() /* キー入力があるなら 1 なければ 0 */
{
uint code, encode;
int chrcnt;
code = KYB_inpchk( &chrcnt, &encode );
if ( chrcnt == 0 )
return 0;
else
return 1;
}
char key_read() /* キー入力があれば そのコード なければ 0 */
{
if (key_chk())
return key_get();
else
return 0;
}
void key_clrbuf()
{
KYB_clrbuf();
}
/*====================================================
グラフィック関係
====================================================*/
void grp_init()
{
EGB_init ( EGB_work, 1536 );
}
void grp_clr()
{
EGB_clearScreen( EGB_work );
}
void grp_putstr( x, y, str, col )
int x, y; /* 文字列の表示位置 */
char *str; /* シフト JIS 文字列(100バイト以内) */
int col;
{
char parabuf[110];
EGB_color(EGB_work, 0, col);
* (short*) ( parabuf ) = x;
* (short*) ( parabuf + 2 ) = y + 16;
* (short*) ( parabuf + 4 ) = strlen( str );
strcpy( parabuf+6, str );
EGB_sjisString( EGB_work, parabuf );
}
void grp_pset( x, y, col, mode )
int x, y;
int col;
int mode;
{
short para[3];
para[0] = 1;
para[1] = x;
para[2] = y;
EGB_writeMode( EGB_work, mode );
EGB_color( EGB_work, 0, col );
EGB_pset( EGB_work, (char*) para );
}
void grp_line( x1, y1, x2, y2, col, mode )
int x1, y1, x2, y2;
int col;
int mode;
{
short para[5];
para[0] = 2;
para[1] = x1;
para[2] = y1;
para[3] = x2;
para[4] = y2;
EGB_writeMode( EGB_work, mode );
EGB_color( EGB_work, 0, col );
EGB_connect( EGB_work, (char*) para );
}
void grp_boxline( x1, y1, xlen, ylen, col, mode )
int x1, y1;
int xlen, ylen;
int col;
int mode;
{
short para[4];
para[0] = x1;
para[1] = y1;
para[2] = x1 + xlen -1;
para[3] = y1 + ylen -1;
EGB_writeMode( EGB_work, mode );
EGB_paintMode( EGB_work, 0x202 );
EGB_color( EGB_work, 0, col );
EGB_rectangle( EGB_work, (char*) para );
}
void grp_boxfill( x1, y1, xlen, ylen, col, mode )
int x1, y1;
int xlen, ylen;
int col;
int mode;
{
short para[4];
para[0] = x1;
para[1] = y1;
para[2] = x1 + xlen -1;
para[3] = y1 + ylen -1;
EGB_writeMode( EGB_work, mode );
EGB_paintMode( EGB_work, 0x222 );
EGB_color( EGB_work, 0, col );
EGB_color( EGB_work, 2, col );
EGB_rectangle( EGB_work, (char*) para );
}
int grp_getWrtpage()
{
return (int) EGB_getWritePage( EGB_work, 0 );
}
void grp_setWrtpage( page )
int page;
{
EGB_writePage( EGB_work, page );
}
void grp_copy( sx1, sy1, sxlen, sylen, sp, dx1, dy1, dp, mode )
int sx1, sy1, sxlen, sylen;
int dx1, dy1;
int sp, dp;
int mode;
{
int n, sx2, sy2, dmy, nowpage;
char para[18], para2[8];
nowpage = grp_getWrtpage();
grp_setWrtpage( sp );
sx2 = sy1 + sxlen - 1;
sy2 = sy1 + sylen - 1;
WORD(para + 0) = 4;
WORD(para + 2) = sx1;
WORD(para + 4) = sy1;
WORD(para + 6) = sx1;
WORD(para + 8) = sy2;
WORD(para + 10) = sx2;
WORD(para + 12) = sy2;
WORD(para + 14) = sx2;
WORD(para + 16) = sy1;
n = 0x80;
EGB_region( EGB_work, &n, &dmy, &dmy, &dmy, &dmy, &dmy, para );
para2[0] = dp;
para2[1] = 0;
WORD(para2 + 2) = dx1 - sx1;
WORD(para2 + 4) = dy1 - sy1;
EGB_copy( EGB_work, 0, para2, NULL );
EGB_writePage( EGB_work, (int) nowpage );
}
void grp_setplt( plt, rgb )
int plt;
int rgb; /* bit23-16:赤 bit15-8:緑 bit7-0:青 */
{
char para[12];
DWORD(para + 0) = 1;
DWORD(para + 4) = plt;
BYTE(para + 8) = ( rgb & 0xff );
BYTE(para + 9) = ( (rgb >> 8) & 0xff );
BYTE(para + 10) = ( (rgb >> 16) & 0xff );
BYTE(para + 11) = 0;
EGB_palette( EGB_work, 0, para );
}
int grp_getplt( plt ) /* ret : bit23-16:赤 bit15-8:緑 bit7-0:青 */
int plt;
{
char pltdat[4+8*256], *p;
int ret;
EGB_getPalette( grp_getWrtpage(), pltdat );
p = pltdat + 4 + 8 * plt + 4;
ret = *p | ((int)*(p+1) << 16) | ((int)*(p+2) << 8);
return ret;
}
void grp_getblk( x1, y1, xlen, ylen, buf )
int x1, y1, xlen, ylen;
char *buf;
{
char para[14];
DWORD(para + 0) = (unsigned long) ( buf + 4 );
WORD(para + 4) = 0;
WORD(para + 6) = x1;
WORD(para + 8) = y1;
WORD(para + 10) = x1 + xlen - 1;
WORD(para + 12) = y1 + ylen - 1;
WORD(buf + 0) = xlen;
WORD(buf + 2) = ylen;
EGB_getBlock( EGB_work, para );
}
void grp_putBlk( data, x1, y1 )
char *data;
int x1, y1;
{
char para[14];
DWORD(para + 0) = (unsigned long) ( data + 4 );
WORD(para + 4) = 0;
WORD(para + 6) = x1;
WORD(para + 8) = y1;
WORD(para + 10) = x1 + (*(int*) data ) - 1;
WORD(para + 12) = y1 + (*(int*) (data+2)) - 1;
EGB_putBlock( EGB_work, 0, para );
}
int grp_point ( x, y )
int x, y;
{
int ret;
EGB_point( EGB_work, 0, x, y, &ret);
return ret;
}
void grp_mode ( int mode )
{
EGB_resolution( EGB_work, 0, mode );
if ( 1 <= mode && mode <= 11 )
EGB_resolution( EGB_work, 1, mode );
}
void grp_mode2 ( int mode )
{
EGB_resolution( EGB_work, 1, mode );
}
void grp_dispPos ( int x, int y )
{
EGB_displayStart( EGB_work, 1, x, y );
}
int grp_getMode()
{
int page, p0,p1;
page = grp_getWrtpage();
EGB_getResolution( &p0, &p1 );
return ( page == 0 ? p0 : p1 );
}
void grp_scrZoom( int xrate, int yrate )
{
static struct { int x,y } resolution[] =
{ { 640,400 }, { 640,200 }, { 640,480 }, { 640,400 },
{ 256,256 }, { 256,256 }, { 256,240 }, { 256,240 },
{ 360,240 }, { 320,240 }, { 320,240 },
{ 640,480 }, { 640,400 }, { 720,480 },
{ 320,480 }, { 320,480 }, { 512,480 }, { 512,480 } };
int mode;
EGB_displayStart( EGB_work, 2, xrate, yrate );
mode = grp_getMode() - 1;
EGB_displayStart( EGB_work, 3, resolution[mode].x, resolution[mode].y );
}